/*************************************************************************
  > File Name: 6stat.c
  > Author: Ykk
  > Mail: 3393579535@qq.com 
  > Created Time: 2023年04月01日 星期六 17时26分19秒
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
//显示文件类型的第一个版本·
int show_file_type(struct stat *s)
{
	switch(s->st_mode & S_IFMT)
	{
		//块设备
		case S_IFBLK: 
			printf("该文件是块设备\n");
			break;
		//字符设备
		case S_IFCHR: 
			printf("该文件是字符设备\n");
			break;
		//目录
		case S_IFDIR: 
			printf("该文件是目录\n");
			break;
		//管道
		case S_IFIFO: 
			printf("该文件是管道\n");
			break;
		//符号链接
		case S_IFLNK: 
			printf("该文件是符号链接\n");
			break;
		//普通文件
		case S_IFREG: 
			printf("该文件是普通文件\n");
			break;
		//套接字
		case S_IFSOCK: 
			printf("该文件是套接字\n");
			break;
		default: printf("未知的文件类型\n"); break;
	}
	return 0;
}

int main(int argc, char **argv)
{
	int ret = -1;
	struct stat s;

	//获取文件信息
	ret =stat("txt",&s);

	//容错判断
	if(2!=argc)
	{
		printf("usage: ./a.out filename ");
		return 1;
	}

	//获取文件信息
	ret = stat(argv[1],&s);
	if(-1 == ret)
	{
		perror("stat");
		return 1;
	}

	//显示文件的类型
	show_file_type(&s);

	return 0;
}
